Projekt Pronal Projekt Pronal

Kazalo:
Sofinasiranje projekta
Starejši - učbenik...
Starejši - zbirka nalog...
Tekmovanja...
Tekmovanja - dopolni...
Tekmovanja - Parsons...
Tekmovanja - popravi
rtk 1988
rtk 1996
rtk 1998
rtk 1999
rtk 2000
rtk 2001
rtk 2002
rtk 2004
rtk 2006
rtk 2007
rtk 2008
rtk 2009
rtk 2013
rtk 2014
rtk 2016
rtk 2017
rtk 2018
rtk 1988

rtk 1988


1988.1.2

1. podnaloga

Naloga

Imamo program, ki naj bi preberal vrstico z nekaj besedami, ki so ločene z enim ali več presledki, in besede izpisal urejene po abecedi.

besede = input('').split('y')
besede.reverse()
print("".join(besede))

Vendar pa program ne deluje pravilno.Spremeni program, da bo prebral vrstico z nekaj besedami, ki so ločene z enim ali več presledki, in bo besede izpiše v obratnem vrstnem redu.

Vhodni podatki

Vrstica z besedilom, ki vsebuje besede ločene z vsaj enim presledkom.

Izhodni podatki

Izpiši eno samo vrstico z obrnjenim vrstnim redom besed.

Primer

Vhod
>>> 'Kako zanimiv    primer!  '
Izhod
'primer! zanimiv Kako'

Uradna rešitev

besede = input('').split()
besede.reverse()
print(" ".join(besede))

1988.2.2

1. podnaloga

Uporabniki nekega programa so se pritožili, da so ukazne besede predolge. Zato želimo vpeljati možnost okrajševanja ukazov. Ukaz dodaj naj bi bilo na primer mogoče okrajšati na dod, doda ali dodaj; ne pa na do (prekratka okrajšava) ali dodamo (napačni znaki v nizu). Okrajšavo opišemo tako, da z zvezdico v modelu ukazne besede označimo, do kam sega obvezni del ukaza; v našem primeru dod*aj. Okrajšan ukaz mora biti dolg najmanj en znak(v modelu ukazne besede zvezdica nikoli ne stoji na prvem mestu).

Naloga (Popravi program)

Želeni program že imamo, vendar se je pri shranjevanju nekaj zalomilo in se je koda na treh mestih spremenila.

model = input('')
preverjalni = input('')
seUjema = False
cezZvezdico = False
zamik = 0 #zvezdico bomo preskočili
i = 1
while seUjema:
    iModel = model[i + zamik]
    iPreverjalni = preverjalni[i]
    if iModel == '*':
        zamik = 1
        iModel = model[i + zamik]
        cezZvezdico = True
    if iPreverjalni == ' ':
        break
    elif iModel != iPreverjalni:
        seUjema = False
    i += 1
print(seUjema or cezZvezdico)

Popravi program tako, da bo program deloval pravlino.

Vhodni podatki

V prvi vrstici je model ukazne besede, ki se konča z vsaj enim presledkom. V drugi vrstici je preverjalni niz, ki se zaključi z vsaj enim presledkom.

Izhodni podatki

Program izpiše True, če prverjalni niz ustreza modelu ukazne besede in False, če ne.

Primer

Vhod
>>> 'abc*de  '
>>> 'abcd '
Izhod
'True'

Uradna rešitev

model = input('')
preverjalni = input('')
seUjema = True
cezZvezdico = False
zamik = 0 #zvezdico bomo preskočili
i = 0
while seUjema:
    iModel = model[i + zamik]
    iPreverjalni = preverjalni[i]
    if iModel == '*':
        zamik = 1
        iModel = model[i + zamik]
        cezZvezdico = True
    if iPreverjalni == ' ':
        break
    elif iModel != iPreverjalni:
        seUjema = False
    i += 1
print(seUjema and cezZvezdico)

1988.3.2

1. podnaloga

Naloga (Popravi program)

Imamo program, ki prešteje, kolikokrat se v nekem nizu znakov pojavi nek drug podniz. Pri tem ni nujno, da znaki drugega niza v prvem stoje zaporedoma, ujemati se mora le vrstni red. Vendar pa ima program tri napake.

def isciPodniz (niz, podniz):
    '''funkcija poišče kolikokrat se podniz pojavi v nizu'''
    stPojavitev = 0
    if podniz == '':
        stPojavitev += 1
        return stPojavitev
    if niz == '':
        return stPojavitev
    delniPodniz = podniz[0]
    for indeks in range(len(niz)):
        if niz[indeks] == delniPodniz:
            stPojavitev = isciPodniz(niz[indeks:], podniz[1])
    return stPojavitev


vhodni = input('').split()
niz = vhodni[0]
podniz = vhodni[1]
print(isciPodniz(niz, podniz))

Popravi program, da bo program deloval pravilno.

Vhodni podatki

Ena vrstica v kateri sta dana niza ločena s presledkom. Prvi je niz v katerem iščemo, drugi pa je podniz, ki ga iščemo v prvem nizu.

Izhodni podatki

Izpiši eno samo število -- število pojavitev podniza v nizu.

Primer

Vhod
>>> 'matematika mati'
Izhod
4

Uradna rešitev

def isciPodniz (niz, podniz):
    '''funkcija poišče kolikokrat se podniz pojavi v nizu'''
    stPojavitev = 0
    if podniz == '':
        stPojavitev += 1
        return stPojavitev
    if niz == '':
        return stPojavitev
    delniPodniz = podniz[0]
    for indeks in range(len(niz)):
        if niz[indeks] == delniPodniz:
            stPojavitev += isciPodniz(niz[indeks + 1:], podniz[1:])
    return stPojavitev


vhodni = input('').split()
niz = vhodni[0]
podniz = vhodni[1]
print(isciPodniz(niz, podniz))

1988.1.4

1. podnaloga

Naloga (Popravi program)

Imamo funkcijo, ki prešteje popolne kvadrate od 2 do vključno prebranega števila a, vendar funkcija ne deluje pravilno.

def funkcija(a):
    d = 0
    for k in range(2, a):
        p = 1
        q = k/p
        while p < q:
            p += 1
            q = k/p
            if (p != q) and (k%p == 0):
                d += 1
    return d

Poišči in popravi napake.

Vhodni podatki

Funkcija sprejme en podatek $a$, ki je naravno število večje ali enako od $2$.

Omejitve vhodnih podatkov
  • $2 \leq a$

Izhodni podatki

Funkcija vrne število $d$, ki je enako številu popolnih kvadratov števil med $2$ in $a$.

Primer

Vhod
>>> funkcija(100)
Izhod
9

Uradna rešitev

def funkcija(a):
    d = 0
    for k in range(2, a + 1):
        p = 1
        q = k/p
        while p < q:
            p += 1
            q = k/p
            if (p == q) and (k%p == 0):
                d += 1
    return d
Mesto objave ob koncu projekta 15.9.2018